package czolgisci.tiles;

import java.awt.Point;
import java.io.IOException;

import utils.geom.Direction;


/**
 * Klasa abstrakcyjna defniująca typ kafelka który się porusza, np. czołg, kogut, pacman.
 * @author kasztan
 * @version 1.0
 */
public abstract class AMovableTile extends ATile
{
	public AMovableTile(String imagePath, Point position) throws IOException
	{
		super(imagePath, position);
	}
	
	protected ITilesFeedbackListener feedbackListener;
	
	/**
	 * rejestruje klasę, która będzie nasłuchiwać zmian w danym obiekcie
	 * @param fListener
	 */
	public void registerFeedbackListener(ITilesFeedbackListener fListener)
	{
		feedbackListener = fListener;
	}
	
	/**
	 * porusz obiekt na południe (metoda abstrakcyjna, niezaimplementowana)
	 */
	abstract public void moveSouth();

	/**
	 * porusz obiekt na zachód (metoda abstrakcyjna, niezaimplementowana)
	 */
	abstract public void moveWest();

	/**
	 * porusz obiekt na wschód (metoda abstrakcyjna, niezaimplementowana)
	 */
	abstract public void moveEast();

	/**
	 * porusz obiekt na północ (metoda abstrakcyjna, niezaimplementowana)
	 */
	abstract public void moveNorth();
	
	protected int xSpeed;
	protected int ySpeed;
	
	public void move(Direction dir, int distance)
	{
		int tmpXSpeed = xSpeed;
		int tmpYSpeed = ySpeed;
		xSpeed = ySpeed = distance;
		move(dir);
		xSpeed = tmpXSpeed;
		ySpeed = tmpYSpeed;
	}

	public void move(Direction dir)
	{
		switch(dir)
		{
			case NORTH:
				moveNorth();
				break;
			case SOUTH:
				moveSouth();
				break;
			case EAST:
				moveEast();
				break;
			case WEST:
				moveWest();
				break;
		}
	}
}
